package cn.iocoder.yudao.module.written.exam.dal.dataobject.llm;

import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Data;

import java.util.List;
import java.util.Map;

/**
 * 节点完成事件数据
 *
 * @author 芋道源码
 */
@Data
public class NodeFinishedData {

    /**
     * 节点实例ID
     */
    @JsonProperty("id")
    private String id;

    /**
     * 节点ID
     */
    @JsonProperty("node_id")
    private String nodeId;

    /**
     * 节点类型
     */
    @JsonProperty("node_type")
    private String nodeType;

    /**
     * 节点标题
     */
    @JsonProperty("title")
    private String title;

    /**
     * 节点索引
     */
    @JsonProperty("index")
    private Integer index;

    /**
     * 前置节点ID
     */
    @JsonProperty("predecessor_node_id")
    private String predecessorNodeId;

    /**
     * 输入数据
     */
    @JsonProperty("inputs")
    private Map<String, Object> inputs;

    /**
     * 处理数据
     */
    @JsonProperty("process_data")
    private ProcessData processData;

    /**
     * 输出数据
     */
    @JsonProperty("outputs")
    private NodeOutputs outputs;

    /**
     * 执行状态
     */
    @JsonProperty("status")
    private String status;

    /**
     * 错误信息
     */
    @JsonProperty("error")
    private String error;

    /**
     * 执行时间（秒）
     */
    @JsonProperty("elapsed_time")
    private Double elapsedTime;

    /**
     * 执行元数据
     */
    @JsonProperty("execution_metadata")
    private ExecutionMetadata executionMetadata;

    /**
     * 创建时间
     */
    @JsonProperty("created_at")
    private Long createdAt;

    /**
     * 完成时间
     */
    @JsonProperty("finished_at")
    private Long finishedAt;

    /**
     * 文件列表
     */
    @JsonProperty("files")
    private List<Object> files;

    /**
     * 并行ID
     */
    @JsonProperty("parallel_id")
    private String parallelId;

    /**
     * 并行开始节点ID
     */
    @JsonProperty("parallel_start_node_id")
    private String parallelStartNodeId;

    /**
     * 父并行ID
     */
    @JsonProperty("parent_parallel_id")
    private String parentParallelId;

    /**
     * 父并行开始节点ID
     */
    @JsonProperty("parent_parallel_start_node_id")
    private String parentParallelStartNodeId;

    /**
     * 迭代ID
     */
    @JsonProperty("iteration_id")
    private String iterationId;

    /**
     * 循环ID
     */
    @JsonProperty("loop_id")
    private String loopId;

    /**
     * 节点输出数据
     */
    @Data
    public static class NodeOutputs {

        /**
         * 输出文本
         */
        @JsonProperty("text")
        private String text;

        /**
         * 使用情况
         */
        @JsonProperty("usage")
        private Usage usage;

        /**
         * 完成原因
         */
        @JsonProperty("finish_reason")
        private String finishReason;

        /**
         * 文件列表
         */
        @JsonProperty("files")
        private List<Object> files;
    }

    /**
     * 执行元数据
     */
    @Data
    public static class ExecutionMetadata {

        /**
         * 总token数
         */
        @JsonProperty("total_tokens")
        private Integer totalTokens;

        /**
         * 总价格
         */
        @JsonProperty("total_price")
        private String totalPrice;

        /**
         * 货币单位
         */
        @JsonProperty("currency")
        private String currency;
    }
} 